#include "08_MyTask.hpp"
#include <stdlib.h>         // exit
#include <iostream>
#include <csignal>

#define info_msg(msg) do { \
    printf("%s | %d | %s | %s \n", __FILE__, __LINE__, __FUNCTION__, msg); \
} while(0)

// 移出这里的g.server定义，因为已经在08_Mytask.cpp中定义了
#if 0
namespace xy
{
    TcpServer* g_server = nullptr;
}
#endif

int main()
{
    // 0. 注册信号处理函数（功能是Ctrl+C优雅退出）
    signal(SIGINT, xy::signal_handler); 

    // 1. 创建TcpServer对象，准备接受连接
    // - 测试阶段：推荐本地回环地址127.0.0.1
    // - 上线阶段：推荐使用默认地址0.0.0.0
    xy::TcpServer tcp_server(8080, "0.0.0.0");
    xy::g_server = &tcp_server;     // 赋值给全局变量
    
    // 2. 开启循环(非阻塞)
    tcp_server.start();

    // 3. 等待(看起来只要在跑，就阻塞等待的样子)
    while(tcp_server.get_is_running())
    {
        std::this_thread::sleep_for(std::chrono::seconds(1));
        info_msg("while");
    }

    // 4. 停止循环
    //tcp_server.stop();    // ctrl + c已经连锁调用了stop()，因此这里不需要重复处理
    info_msg("Main program exited gracefully \n"); 

    return 0;
}

